Micron Document
🎖️GitЯра🎖️


Displaying Raw • Download

feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/navigation/SettingsNavigation.kt 517b96380bb5d6462d961e664567019c4e60c10b (517b9638) Text, 22.17 KB

T8b949e/*
* Copyright (c) 2026 Meshtastic LLC
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
Tff7b72package T7ee787org.meshtastic.feature.settings.navigation

Tff7b72import T7ee787androidx.compose.runtime.Composable
Tff7b72import T7ee787androidx.compose.runtime.DisposableEffect
Tff7b72import T7ee787androidx.compose.runtime.LaunchedEffect
Tff7b72import T7ee787androidx.compose.runtime.SideEffect
Tff7b72import T7ee787androidx.compose.runtime.getValue
Tff7b72import T7ee787androidx.compose.runtime.produceState
Tff7b72import T7ee787androidx.compose.runtime.remember
Tff7b72import T7ee787androidx.compose.runtime.snapshotFlow
Tff7b72import T7ee787androidx.lifecycle.ViewModel
Tff7b72import T7ee787androidx.lifecycle.ViewModelStore
Tff7b72import T7ee787androidx.lifecycle.ViewModelStoreOwner
Tff7b72import T7ee787androidx.lifecycle.compose.collectAsStateWithLifecycle
Tff7b72import T7ee787androidx.lifecycle.compose.dropUnlessResumed
Tff7b72import T7ee787androidx.navigation3.runtime.EntryProviderScope
Tff7b72import T7ee787androidx.navigation3.runtime.NavBackStack
Tff7b72import T7ee787androidx.navigation3.runtime.NavKey
Tff7b72import T7ee787kotlinx.coroutines.flow.distinctUntilChanged
Tff7b72import T7ee787org.koin.compose.viewmodel.koinViewModel
Tff7b72import T7ee787org.koin.core.annotation.KoinViewModel
Tff7b72import T7ee787org.koin.core.parameter.parametersOf
Tff7b72import T7ee787org.meshtastic.core.navigation.NodesRoute
Tff7b72import T7ee787org.meshtastic.core.navigation.Route
Tff7b72import T7ee787org.meshtastic.core.navigation.SettingsRoute
Tff7b72import T7ee787org.meshtastic.feature.settings.AboutScreen
Tff7b72import T7ee787org.meshtastic.feature.settings.AcknowledgementsScreen
Tff7b72import T7ee787org.meshtastic.feature.settings.AdministrationScreen
Tff7b72import T7ee787org.meshtastic.feature.settings.DeviceConfigurationScreen
Tff7b72import T7ee787org.meshtastic.feature.settings.DeviceLinkDirectoryScreen
Tff7b72import T7ee787org.meshtastic.feature.settings.ModuleConfigurationScreen
Tff7b72import T7ee787org.meshtastic.feature.settings.NodeListScreen
Tff7b72import T7ee787org.meshtastic.feature.settings.SettingsViewModel
Tff7b72import T7ee787org.meshtastic.feature.settings.appfunctions.AppFunctionsSettingsScreen
Tff7b72import T7ee787org.meshtastic.feature.settings.appfunctions.AppFunctionsSettingsViewModel
Tff7b72import T7ee787org.meshtastic.feature.settings.debugging.DebugScreen
Tff7b72import T7ee787org.meshtastic.feature.settings.debugging.DebugViewModel
Tff7b72import T7ee787org.meshtastic.feature.settings.filter.FilterSettingsScreen
Tff7b72import T7ee787org.meshtastic.feature.settings.filter.FilterSettingsViewModel
Tff7b72import T7ee787org.meshtastic.feature.settings.radio.CleanNodeDatabaseScreen
Tff7b72import T7ee787org.meshtastic.feature.settings.radio.CleanNodeDatabaseViewModel
Tff7b72import T7ee787org.meshtastic.feature.settings.radio.RadioConfigViewModel
Tff7b72import T7ee787org.meshtastic.feature.settings.radio.channel.ChannelConfigScreen
Tff7b72import T7ee787org.meshtastic.feature.settings.radio.component.AmbientLightingConfigScreen
Tff7b72import T7ee787org.meshtastic.feature.settings.radio.component.AudioConfigScreen
Tff7b72import T7ee787org.meshtastic.feature.settings.radio.component.BluetoothConfigScreen
Tff7b72import T7ee787org.meshtastic.feature.settings.radio.component.CannedMessageConfigScreen
Tff7b72import T7ee787org.meshtastic.feature.settings.radio.component.DetectionSensorConfigScreen
Tff7b72import T7ee787org.meshtastic.feature.settings.radio.component.DeviceConfigScreenCommon
Tff7b72import T7ee787org.meshtastic.feature.settings.radio.component.DisplayConfigScreen
Tff7b72import T7ee787org.meshtastic.feature.settings.radio.component.ExternalNotificationConfigScreenCommon
Tff7b72import T7ee787org.meshtastic.feature.settings.radio.component.LoRaConfigScreen
Tff7b72import T7ee787org.meshtastic.feature.settings.radio.component.MQTTConfigScreen
Tff7b72import T7ee787org.meshtastic.feature.settings.radio.component.MeshBeaconConfigScreen
Tff7b72import T7ee787org.meshtastic.feature.settings.radio.component.NeighborInfoConfigScreen
Tff7b72import T7ee787org.meshtastic.feature.settings.radio.component.NetworkConfigScreen
Tff7b72import T7ee787org.meshtastic.feature.settings.radio.component.PaxcounterConfigScreen
Tff7b72import T7ee787org.meshtastic.feature.settings.radio.component.PositionConfigScreenCommon
Tff7b72import T7ee787org.meshtastic.feature.settings.radio.component.PowerConfigScreen
Tff7b72import T7ee787org.meshtastic.feature.settings.radio.component.RangeTestConfigScreen
Tff7b72import T7ee787org.meshtastic.feature.settings.radio.component.RemoteHardwareConfigScreen
Tff7b72import T7ee787org.meshtastic.feature.settings.radio.component.SecurityConfigScreenCommon
Tff7b72import T7ee787org.meshtastic.feature.settings.radio.component.SerialConfigScreen
Tff7b72import T7ee787org.meshtastic.feature.settings.radio.component.StatusMessageConfigScreen
Tff7b72import T7ee787org.meshtastic.feature.settings.radio.component.StoreForwardConfigScreen
Tff7b72import T7ee787org.meshtastic.feature.settings.radio.component.TAKConfigScreen
Tff7b72import T7ee787org.meshtastic.feature.settings.radio.component.TakServerScreen
Tff7b72import T7ee787org.meshtastic.feature.settings.radio.component.TelemetryConfigScreen
Tff7b72import T7ee787org.meshtastic.feature.settings.radio.component.UserConfigScreen
Tff7b72import T7ee787kotlin.reflect.KClass

T8b949e/**
* Identifies whether the active back stack is outside settings, local settings, or remote settings for one node.
* Keeping these states distinct prevents a local settings ViewModel from remaining active on unrelated tabs.
*/
Tff7b72internal Tff7b72sealed Tff7b72interface T56d364SettingsRadioConfigSession Tb4b4b4{
Tff7b72data Tff7b72object T56d364Inactive Tb4b4b4: Te6edf3SettingsRadioConfigSession

Tff7b72sealed Tff7b72interface T56d364Active Tb4b4b4: Te6edf3SettingsRadioConfigSession Tb4b4b4{
Tff7b72val Te6edf3destinationTb4b4b4: Tffa657Int?
Tff7b72val Te6edf3viewModelKeyTb4b4b4: Tffa657String
Tb4b4b4}

Tff7b72data Tff7b72object T56d364Local Tb4b4b4: Te6edf3Active Tb4b4b4{
Tff7b72override Tff7b72val Te6edf3destinationTb4b4b4: Tffa657Int? Tff7b72= Tff7b72null
Tff7b72override Tff7b72val Te6edf3viewModelKeyTb4b4b4: Tffa657String Tff7b72= Ta5d6ff"Ta5d6ffsettings-localTa5d6ff"
Tb4b4b4}

Tff7b72data Tff7b72class T56d364RemoteTb4b4b4(Tff7b72override Tff7b72val Te6edf3destinationTb4b4b4: Tffa657IntTb4b4b4) Tb4b4b4: Te6edf3Active Tb4b4b4{
Tff7b72override Tff7b72val Te6edf3viewModelKeyTb4b4b4: Tffa657String Tff7b72= Ta5d6ff"Ta5d6ffsettings-remote-Tffd700$Te6edf3destinationTa5d6ff"
Tb4b4b4}
Tb4b4b4}

Tff7b72internal Tff7b72class T56d364SettingsRadioConfigViewModelStoreOwner Tb4b4b4: Te6edf3ViewModelStoreOwner Tb4b4b4{
Tff7b72override Tff7b72val Te6edf3viewModelStore Tff7b72= Te6edf3ViewModelStoreTb4b4b4(Tb4b4b4)

Tff7b72fun Td2a8ffclearTb4b4b4(Tb4b4b4) Tff7b72= Te6edf3viewModelStoreTb4b4b4.Te6edf3clearTb4b4b4(Tb4b4b4)
Tb4b4b4}

T8b949e/**
* Retains settings-session stores across configuration changes. A store remains available while its session is the
* active settings destination or while a navigation entry still holds a lease during an exit transition. Once neither
* condition applies, the store is cleared and its [RadioConfigViewModel] collectors are cancelled.
*/
Tf0883e@KoinViewModel
Tff7b72internal Tff7b72class T56d364SettingsRadioConfigSessionHolder Tb4b4b4: Te6edf3ViewModelTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72private Tff7b72data Tff7b72class T56d364SessionStoreTb4b4b4(
Tff7b72val Te6edf3ownerTb4b4b4: Te6edf3SettingsRadioConfigViewModelStoreOwner Tff7b72= Te6edf3SettingsRadioConfigViewModelStoreOwnerTb4b4b4(Tb4b4b4)Tb4b4b4,
Tff7b72var Te6edf3leasesTb4b4b4: Tffa657Int Tff7b72= T79c0ff0Tb4b4b4,
Tb4b4b4)

Tff7b72private Tff7b72val Te6edf3stores Tff7b72= Te6edf3mutableMapOfTff7b72<Te6edf3SettingsRadioConfigSessionTb4b4b4.Te6edf3ActiveTb4b4b4, Te6edf3SessionStoreTff7b72>Tb4b4b4(Tb4b4b4)
Tff7b72private Tff7b72var Te6edf3activeSessionTb4b4b4: Te6edf3SettingsRadioConfigSession Tff7b72= Te6edf3SettingsRadioConfigSessionTb4b4b4.Te6edf3Inactive
Tff7b72private Tff7b72var Te6edf3lastActiveSessionTb4b4b4: Te6edf3SettingsRadioConfigSessionTb4b4b4.Te6edf3ActiveTff7b72? Tff7b72= Tff7b72null

Tff7b72fun Td2a8ffactivateTb4b4b4(Te6edf3sessionTb4b4b4: Te6edf3SettingsRadioConfigSessionTb4b4b4) Tb4b4b4{
Te6edf3activeSession Tff7b72= Te6edf3session
Tff7b72if Tb4b4b4(Te6edf3session Tff7b72is Te6edf3SettingsRadioConfigSessionTb4b4b4.Te6edf3ActiveTb4b4b4) Te6edf3lastActiveSession Tff7b72= Te6edf3session
Te6edf3clearUnusedStoresTb4b4b4(Tb4b4b4)
Tb4b4b4}

T8b949e/**
* Resolves the session captured by a settings entry. During an exit transition the active back stack may already be
* outside settings, so the most recently active session is used instead of throwing from the outgoing composition.
*/
Tff7b72fun Td2a8ffresolveEntrySessionTb4b4b4(Te6edf3sessionTb4b4b4: Te6edf3SettingsRadioConfigSessionTb4b4b4)Tb4b4b4: Te6edf3SettingsRadioConfigSessionTb4b4b4.Te6edf3Active Tff7b72=
Tb4b4b4(Te6edf3session Tff7b72as? Te6edf3SettingsRadioConfigSessionTb4b4b4.Te6edf3ActiveTb4b4b4) Tff7b72?: Te6edf3lastActiveSession Tff7b72?: Te6edf3SettingsRadioConfigSessionTb4b4b4.Te6edf3Local

Tff7b72fun Td2a8ffownerForTb4b4b4(Te6edf3sessionTb4b4b4: Te6edf3SettingsRadioConfigSessionTb4b4b4.Te6edf3ActiveTb4b4b4)Tb4b4b4: Te6edf3ViewModelStoreOwner Tff7b72= Te6edf3storeForTb4b4b4(Te6edf3sessionTb4b4b4)Tb4b4b4.Te6edf3owner

Tff7b72fun Td2a8ffretainTb4b4b4(Te6edf3sessionTb4b4b4: Te6edf3SettingsRadioConfigSessionTb4b4b4.Te6edf3ActiveTb4b4b4) Tb4b4b4{
Te6edf3storeForTb4b4b4(Te6edf3sessionTb4b4b4)Tb4b4b4.Te6edf3leases Tff7b72+Tff7b72= T79c0ff1
Tb4b4b4}

Tff7b72fun Td2a8ffreleaseTb4b4b4(Te6edf3sessionTb4b4b4: Te6edf3SettingsRadioConfigSessionTb4b4b4.Te6edf3ActiveTb4b4b4) Tb4b4b4{
Te6edf3storesTff7b72[Te6edf3sessionTff7b72]Tff7b72?.Te6edf3let Tb4b4b4{ Te6edf3store Tff7b72-Tff7b72> Tff7b72if Tb4b4b4(Te6edf3storeTb4b4b4.Te6edf3leases Tff7b72> T79c0ff0Tb4b4b4) Te6edf3storeTb4b4b4.Te6edf3leases Tff7b72-Tff7b72= T79c0ff1 Tb4b4b4}
Te6edf3clearUnusedStoresTb4b4b4(Tb4b4b4)
Tb4b4b4}

Tff7b72private Tff7b72fun Td2a8ffstoreForTb4b4b4(Te6edf3sessionTb4b4b4: Te6edf3SettingsRadioConfigSessionTb4b4b4.Te6edf3ActiveTb4b4b4)Tb4b4b4: Te6edf3SessionStore Tff7b72=
Te6edf3storesTb4b4b4.Te6edf3getOrPutTb4b4b4(Te6edf3sessionTb4b4b4, Tff7b72::Te6edf3SessionStoreTb4b4b4)

Tff7b72private Tff7b72fun Td2a8ffclearUnusedStoresTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3current Tff7b72= Te6edf3activeSession Tff7b72as? Te6edf3SettingsRadioConfigSessionTb4b4b4.Te6edf3Active
Tff7b72val Te6edf3iterator Tff7b72= Te6edf3storesTb4b4b4.Te6edf3iteratorTb4b4b4(Tb4b4b4)
Tff7b72while Tb4b4b4(Te6edf3iteratorTb4b4b4.Te6edf3hasNextTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72val Tb4b4b4(Te6edf3sessionTb4b4b4, Te6edf3storeTb4b4b4) Tff7b72= Te6edf3iteratorTb4b4b4.Te6edf3nextTb4b4b4(Tb4b4b4)
Tff7b72if Tb4b4b4(Te6edf3session Tff7b72!Tff7b72= Te6edf3current Tff7b72&Tff7b72& Te6edf3storeTb4b4b4.Te6edf3leases Tff7b72=Tff7b72= T79c0ff0Tb4b4b4) Tb4b4b4{
Te6edf3storeTb4b4b4.Te6edf3ownerTb4b4b4.Te6edf3clearTb4b4b4(Tb4b4b4)
Te6edf3iteratorTb4b4b4.Te6edf3removeTb4b4b4(Tb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}

Tff7b72override Tff7b72fun Td2a8ffonClearedTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3storesTb4b4b4.Te6edf3valuesTb4b4b4.Te6edf3forEach Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3ownerTb4b4b4.Te6edf3clearTb4b4b4(Tb4b4b4) Tb4b4b4}
Te6edf3storesTb4b4b4.Te6edf3clearTb4b4b4(Tb4b4b4)
Tff7b72superTb4b4b4.Te6edf3onClearedTb4b4b4(Tb4b4b4)
Tb4b4b4}
Tb4b4b4}

T8b949e/**
* Observes back-stack mutations without invalidating the app shell for every settings submenu push or pop. The returned
* state changes only when the logical settings session changes.
*/
Tf0883e@Composable
Tff7b72internal Tff7b72fun Td2a8ffrememberSettingsRadioConfigSessionTb4b4b4(Te6edf3backStackTb4b4b4: Te6edf3NavBackStackTff7b72<Te6edf3NavKeyTff7b72>Tb4b4b4) Tff7b72=
Te6edf3produceStateTb4b4b4(Te6edf3initialValue Tff7b72= Te6edf3settingsRadioConfigSessionTb4b4b4(Te6edf3backStackTb4b4b4.Te6edf3toListTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4, Te6edf3backStackTb4b4b4) Tb4b4b4{
Te6edf3snapshotFlow Tb4b4b4{ Te6edf3settingsRadioConfigSessionTb4b4b4(Te6edf3backStackTb4b4b4.Te6edf3toListTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4}Tb4b4b4.Te6edf3distinctUntilChangedTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3collect Tb4b4b4{ Te6edf3value Tff7b72= Tffa657it Tb4b4b4}
Tb4b4b4}

Tf0883e@Composable
Tff7b72internal Tff7b72fun Td2a8ffsettingsRadioConfigViewModelTb4b4b4(
Te6edf3sessionTb4b4b4: Te6edf3SettingsRadioConfigSessionTb4b4b4.Te6edf3ActiveTb4b4b4,
Te6edf3viewModelStoreOwnerTb4b4b4: Te6edf3ViewModelStoreOwnerTb4b4b4,
Tb4b4b4)Tb4b4b4: Te6edf3RadioConfigViewModel Tff7b72=
Te6edf3koinViewModelTff7b72<Te6edf3RadioConfigViewModelTff7b72>Tb4b4b4(Te6edf3key Tff7b72= Te6edf3sessionTb4b4b4.Te6edf3viewModelKeyTb4b4b4, Te6edf3viewModelStoreOwner Tff7b72= Te6edf3viewModelStoreOwnerTb4b4b4) Tb4b4b4{
Te6edf3parametersOfTb4b4b4(Te6edf3sessionTb4b4b4.Te6edf3destinationTb4b4b4)
Tb4b4b4}

T8b949e/** Returns the retained provider used by all entries in the active settings session. */
Tf0883e@Composable
Tff7b72fun Td2a8ffrememberSettingsRadioConfigViewModelProviderTb4b4b4(
Te6edf3backStackTb4b4b4: Te6edf3NavBackStackTff7b72<Te6edf3NavKeyTff7b72>Tb4b4b4,
Tb4b4b4)Tb4b4b4: Tf0883e@Composable Tb4b4b4(Te6edf3SettingsRouteTb4b4b4.Te6edf3SettingsTff7b72?Tb4b4b4) Tff7b72-Tff7b72> Te6edf3RadioConfigViewModel Tb4b4b4{
Tff7b72val Te6edf3session Tff7b72by Te6edf3rememberSettingsRadioConfigSessionTb4b4b4(Te6edf3backStackTb4b4b4)
Tff7b72val Te6edf3holderTb4b4b4: Te6edf3SettingsRadioConfigSessionHolder Tff7b72= Te6edf3koinViewModelTb4b4b4(Tb4b4b4)
Te6edf3SideEffect Tb4b4b4{ Te6edf3holderTb4b4b4.Te6edf3activateTb4b4b4(Te6edf3sessionTb4b4b4) Tb4b4b4}

Tff7b72return Te6edf3rememberTb4b4b4(Te6edf3backStackTb4b4b4, Te6edf3holderTb4b4b4) Tb4b4b4{
Tf0883e@Composable Tb4b4b4{ Te6edf3settingsRoot Tff7b72-Tff7b72>
T8b949e// Capture the session once for this navigation entry. An outgoing entry keeps its original local/remote
T8b949e// session during crossfades even after the active top-level back stack has changed.
Tff7b72val Te6edf3entrySession Tff7b72=
Te6edf3rememberTb4b4b4(Te6edf3settingsRootTb4b4b4, Te6edf3holderTb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3candidate Tff7b72=
Tff7b72if Tb4b4b4(Te6edf3settingsRoot Tff7b72!Tff7b72= Tff7b72nullTb4b4b4) Tb4b4b4{
Te6edf3settingsRootTb4b4b4.Te6edf3destNumTff7b72?.Te6edf3letTb4b4b4(Te6edf3SettingsRadioConfigSessionTff7b72::Te6edf3RemoteTb4b4b4)
Tff7b72?: Te6edf3SettingsRadioConfigSessionTb4b4b4.Te6edf3Local
Tb4b4b4} Tff7b72else Tb4b4b4{
Te6edf3settingsRadioConfigSessionTb4b4b4(Te6edf3backStackTb4b4b4.Te6edf3toListTb4b4b4(Tb4b4b4)Tb4b4b4)
Tb4b4b4}
Te6edf3holderTb4b4b4.Te6edf3resolveEntrySessionTb4b4b4(Te6edf3candidateTb4b4b4)
Tb4b4b4}
Tff7b72val Te6edf3owner Tff7b72= Te6edf3rememberTb4b4b4(Te6edf3entrySessionTb4b4b4, Te6edf3holderTb4b4b4) Tb4b4b4{ Te6edf3holderTb4b4b4.Te6edf3ownerForTb4b4b4(Te6edf3entrySessionTb4b4b4) Tb4b4b4}

Te6edf3DisposableEffectTb4b4b4(Te6edf3holderTb4b4b4, Te6edf3entrySessionTb4b4b4) Tb4b4b4{
Te6edf3holderTb4b4b4.Te6edf3retainTb4b4b4(Te6edf3entrySessionTb4b4b4)
Te6edf3onDispose Tb4b4b4{ Te6edf3holderTb4b4b4.Te6edf3releaseTb4b4b4(Te6edf3entrySessionTb4b4b4) Tb4b4b4}
Tb4b4b4}

Te6edf3settingsRadioConfigViewModelTb4b4b4(Te6edf3session Tff7b72= Te6edf3entrySessionTb4b4b4, Te6edf3viewModelStoreOwner Tff7b72= Te6edf3ownerTb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}

Tff7b72internal Tff7b72fun Td2a8ffsettingsRadioConfigSessionTb4b4b4(Te6edf3backStackTb4b4b4: Te6edf3ListTff7b72<Te6edf3NavKeyTff7b72>Tb4b4b4)Tb4b4b4: Te6edf3SettingsRadioConfigSession Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3backStackTb4b4b4.Te6edf3noneTb4b4b4(Te6edf3NavKeyTff7b72::Te6edf3usesRadioConfigSettingsSessionTb4b4b4)Tb4b4b4) Tff7b72return Te6edf3SettingsRadioConfigSessionTb4b4b4.Te6edf3Inactive

T8b949e// Remote administration always carries a Settings root with its destination. Local configuration can also be
T8b949e// opened directly from another graph (currently Connections -> LoRa), so the absence of a root is still an active
T8b949e// local session while a radio-config route remains on the active back stack.
Tff7b72val Te6edf3settingsRoot Tff7b72= Te6edf3backStackTb4b4b4.Te6edf3filterIsInstanceTff7b72<Te6edf3SettingsRouteTb4b4b4.Te6edf3SettingsTff7b72>Tb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3lastOrNullTb4b4b4(Tb4b4b4)
Tff7b72return Te6edf3settingsRootTff7b72?.Te6edf3destNumTff7b72?.Te6edf3letTb4b4b4(Te6edf3SettingsRadioConfigSessionTff7b72::Te6edf3RemoteTb4b4b4) Tff7b72?: Te6edf3SettingsRadioConfigSessionTb4b4b4.Te6edf3Local
Tb4b4b4}

Tff7b72private Tff7b72fun Te6edf3NavKeyTb4b4b4.Td2a8ffusesRadioConfigSettingsSessionTb4b4b4(Tb4b4b4)Tb4b4b4: Tffa657Boolean Tff7b72= Tff7b72this Tff7b72is Te6edf3SettingsRouteTb4b4b4.Te6edf3Settings Tff7b72|Tff7b72|
Tff7b72this Tff7b72=Tff7b72= Te6edf3SettingsRouteTb4b4b4.Te6edf3DeviceConfiguration Tff7b72|Tff7b72|
Tff7b72this Tff7b72=Tff7b72= Te6edf3SettingsRouteTb4b4b4.Te6edf3ModuleConfiguration Tff7b72|Tff7b72|
Tff7b72this Tff7b72=Tff7b72= Te6edf3SettingsRouteTb4b4b4.Te6edf3Administration Tff7b72|Tff7b72|
Te6edf3ConfigRouteTb4b4b4.Te6edf3entriesTb4b4b4.Te6edf3any Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3route Tff7b72=Tff7b72= Tff7b72this Tb4b4b4} Tff7b72|Tff7b72|
Te6edf3ModuleRouteTb4b4b4.Te6edf3entriesTb4b4b4.Te6edf3any Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3route Tff7b72=Tff7b72= Tff7b72this Tb4b4b4}

Tff7b72internal Tff7b72fun Td2a8ffsettingsDestinationTb4b4b4(Te6edf3backStackTb4b4b4: Te6edf3ListTff7b72<Te6edf3NavKeyTff7b72>Tb4b4b4)Tb4b4b4: Tffa657Int? Tff7b72=
Tb4b4b4(Te6edf3settingsRadioConfigSessionTb4b4b4(Te6edf3backStackTb4b4b4) Tff7b72as? Te6edf3SettingsRadioConfigSessionTb4b4b4.Te6edf3ActiveTb4b4b4)Tff7b72?.Te6edf3destination

Tff7b72internal Tff7b72fun Td2a8ffshouldAddSettingsRouteTb4b4b4(Te6edf3currentTb4b4b4: Te6edf3NavKey?Tb4b4b4, Te6edf3routeTb4b4b4: Te6edf3RouteTb4b4b4)Tb4b4b4: Tffa657Boolean Tff7b72= Te6edf3current Tff7b72!Tff7b72= Te6edf3route

Tff7b72private Tff7b72fun Td2a8ffNavBackStackTff7b72<Te6edf3NavKeyTff7b72>Tb4b4b4.Te6edf3addSettingsRouteTb4b4b4(Te6edf3routeTb4b4b4: Te6edf3RouteTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3shouldAddSettingsRouteTb4b4b4(Te6edf3lastOrNullTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3routeTb4b4b4)Tb4b4b4) Te6edf3addTb4b4b4(Te6edf3routeTb4b4b4)
Tb4b4b4}

Tf0883e@SuppressTb4b4b4(Ta5d6ff"Ta5d6ffLongMethodTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffCyclomaticComplexMethodTa5d6ff"Tb4b4b4)
Tff7b72fun Td2a8ffEntryProviderScopeTff7b72<Te6edf3NavKeyTff7b72>Tb4b4b4.Te6edf3settingsGraphTb4b4b4(
Te6edf3backStackTb4b4b4: Te6edf3NavBackStackTff7b72<Te6edf3NavKeyTff7b72>Tb4b4b4,
Te6edf3radioConfigViewModelProviderTb4b4b4: Tf0883e@Composable Tb4b4b4(Te6edf3SettingsRouteTb4b4b4.Te6edf3SettingsTff7b72?Tb4b4b4) Tff7b72-Tff7b72> Te6edf3RadioConfigViewModelTb4b4b4,
Tb4b4b4) Tb4b4b4{
Te6edf3entryTff7b72<Te6edf3SettingsRouteTb4b4b4.Te6edf3SettingsTff7b72> Tb4b4b4{ Te6edf3args Tff7b72-Tff7b72>
Tff7b72val Te6edf3isTabRoot Tff7b72= Te6edf3backStackTb4b4b4.Te6edf3firstOrNullTb4b4b4(Tb4b4b4) Tff7b72=Tff7b72= Te6edf3args
Te6edf3SettingsMainScreenTb4b4b4(
Te6edf3settingsViewModel Tff7b72= Te6edf3koinViewModelTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3radioConfigViewModel Tff7b72= Te6edf3radioConfigViewModelProviderTb4b4b4(Te6edf3argsTb4b4b4)Tb4b4b4,
Te6edf3onClickNodeChip Tff7b72= Tb4b4b4{ Te6edf3backStackTb4b4b4.Te6edf3addTb4b4b4(Te6edf3NodesRouteTb4b4b4.Te6edf3NodeDetailTb4b4b4(Tffa657itTb4b4b4)Tb4b4b4) Tb4b4b4}Tb4b4b4,
Te6edf3onNavigate Tff7b72= Te6edf3backStackTff7b72::Te6edf3addSettingsRouteTb4b4b4,
Te6edf3onBack Tff7b72= Tff7b72if Tb4b4b4(Te6edf3isTabRootTb4b4b4) Tff7b72null Tff7b72else Te6edf3dropUnlessResumed Tb4b4b4{ Te6edf3backStackTb4b4b4.Te6edf3removeLastOrNullTb4b4b4(Tb4b4b4) Tb4b4b4}Tb4b4b4,
Tb4b4b4)
Tb4b4b4}

Te6edf3entryTff7b72<Te6edf3SettingsRouteTb4b4b4.Te6edf3DeviceConfigurationTff7b72> Tb4b4b4{
Te6edf3DeviceConfigurationScreenTb4b4b4(
Te6edf3viewModel Tff7b72= Te6edf3radioConfigViewModelProviderTb4b4b4(Tff7b72nullTb4b4b4)Tb4b4b4,
Te6edf3onBack Tff7b72= Te6edf3dropUnlessResumed Tb4b4b4{ Te6edf3backStackTb4b4b4.Te6edf3removeLastOrNullTb4b4b4(Tb4b4b4) Tb4b4b4}Tb4b4b4,
Te6edf3onNavigate Tff7b72= Te6edf3backStackTff7b72::Te6edf3addSettingsRouteTb4b4b4,
Tb4b4b4)
Tb4b4b4}

Te6edf3entryTff7b72<Te6edf3SettingsRouteTb4b4b4.Te6edf3ModuleConfigurationTff7b72> Tb4b4b4{
Tff7b72val Te6edf3settingsViewModelTb4b4b4: Te6edf3SettingsViewModel Tff7b72= Te6edf3koinViewModelTb4b4b4(Tb4b4b4)
Tff7b72val Te6edf3hiddenFeaturesUnlocked Tff7b72by Te6edf3settingsViewModelTb4b4b4.Te6edf3hiddenFeaturesUnlockedTb4b4b4.Te6edf3collectAsStateWithLifecycleTb4b4b4(Tb4b4b4)
Te6edf3ModuleConfigurationScreenTb4b4b4(
Te6edf3viewModel Tff7b72= Te6edf3radioConfigViewModelProviderTb4b4b4(Tff7b72nullTb4b4b4)Tb4b4b4,
Te6edf3hiddenFeaturesUnlocked Tff7b72= Te6edf3hiddenFeaturesUnlockedTb4b4b4,
Te6edf3onBack Tff7b72= Te6edf3dropUnlessResumed Tb4b4b4{ Te6edf3backStackTb4b4b4.Te6edf3removeLastOrNullTb4b4b4(Tb4b4b4) Tb4b4b4}Tb4b4b4,
Te6edf3onNavigate Tff7b72= Te6edf3backStackTff7b72::Te6edf3addSettingsRouteTb4b4b4,
Tb4b4b4)
Tb4b4b4}

Te6edf3entryTff7b72<Te6edf3SettingsRouteTb4b4b4.Te6edf3AdministrationTff7b72> Tb4b4b4{
Te6edf3AdministrationScreenTb4b4b4(
Te6edf3viewModel Tff7b72= Te6edf3radioConfigViewModelProviderTb4b4b4(Tff7b72nullTb4b4b4)Tb4b4b4,
Te6edf3onBack Tff7b72= Te6edf3dropUnlessResumed Tb4b4b4{ Te6edf3backStackTb4b4b4.Te6edf3removeLastOrNullTb4b4b4(Tb4b4b4) Tb4b4b4}Tb4b4b4,
Tb4b4b4)
Tb4b4b4}

Te6edf3entryTff7b72<Te6edf3SettingsRouteTb4b4b4.Te6edf3CleanNodeDbTff7b72> Tb4b4b4{
Tff7b72val Te6edf3viewModelTb4b4b4: Te6edf3CleanNodeDatabaseViewModel Tff7b72= Te6edf3koinViewModelTb4b4b4(Tb4b4b4)
Te6edf3CleanNodeDatabaseScreenTb4b4b4(Te6edf3viewModel Tff7b72= Te6edf3viewModelTb4b4b4, Te6edf3onBack Tff7b72= Te6edf3dropUnlessResumed Tb4b4b4{ Te6edf3backStackTb4b4b4.Te6edf3removeLastOrNullTb4b4b4(Tb4b4b4) Tb4b4b4}Tb4b4b4)
Tb4b4b4}

Te6edf3ConfigRouteTb4b4b4.Te6edf3entriesTb4b4b4.Te6edf3forEach Tb4b4b4{ Te6edf3routeInfo Tff7b72-Tff7b72>
Te6edf3configComposableTb4b4b4(Te6edf3routeInfoTb4b4b4.Te6edf3routeTff7b72::Te6edf3classTb4b4b4, Te6edf3routeInfoTb4b4b4, Te6edf3radioConfigViewModelProviderTb4b4b4) Tb4b4b4{ Te6edf3viewModel Tff7b72-Tff7b72>
Tff7b72when Tb4b4b4(Te6edf3routeInfoTb4b4b4) Tb4b4b4{
Te6edf3ConfigRouteTb4b4b4.Te6edf3USER Tff7b72-Tff7b72>
Te6edf3UserConfigScreenTb4b4b4(Te6edf3viewModelTb4b4b4, Te6edf3onBack Tff7b72= Te6edf3dropUnlessResumed Tb4b4b4{ Te6edf3backStackTb4b4b4.Te6edf3removeLastOrNullTb4b4b4(Tb4b4b4) Tb4b4b4}Tb4b4b4)

Te6edf3ConfigRouteTb4b4b4.Te6edf3CHANNELS Tff7b72-Tff7b72>
Te6edf3ChannelConfigScreenTb4b4b4(Te6edf3viewModelTb4b4b4, Te6edf3onBack Tff7b72= Te6edf3dropUnlessResumed Tb4b4b4{ Te6edf3backStackTb4b4b4.Te6edf3removeLastOrNullTb4b4b4(Tb4b4b4) Tb4b4b4}Tb4b4b4)

Te6edf3ConfigRouteTb4b4b4.Te6edf3DEVICE Tff7b72-Tff7b72>
Te6edf3DeviceConfigScreenCommonTb4b4b4(Te6edf3viewModelTb4b4b4, Te6edf3onBack Tff7b72= Te6edf3dropUnlessResumed Tb4b4b4{ Te6edf3backStackTb4b4b4.Te6edf3removeLastOrNullTb4b4b4(Tb4b4b4) Tb4b4b4}Tb4b4b4)

Te6edf3ConfigRouteTb4b4b4.Te6edf3POSITION Tff7b72-Tff7b72>
Te6edf3PositionConfigScreenCommonTb4b4b4(Te6edf3viewModelTb4b4b4, Te6edf3onBack Tff7b72= Te6edf3dropUnlessResumed Tb4b4b4{ Te6edf3backStackTb4b4b4.Te6edf3removeLastOrNullTb4b4b4(Tb4b4b4) Tb4b4b4}Tb4b4b4)

Te6edf3ConfigRouteTb4b4b4.Te6edf3POWER Tff7b72-Tff7b72>
Te6edf3PowerConfigScreenTb4b4b4(Te6edf3viewModelTb4b4b4, Te6edf3onBack Tff7b72= Te6edf3dropUnlessResumed Tb4b4b4{ Te6edf3backStackTb4b4b4.Te6edf3removeLastOrNullTb4b4b4(Tb4b4b4) Tb4b4b4}Tb4b4b4)

Te6edf3ConfigRouteTb4b4b4.Te6edf3NETWORK Tff7b72-Tff7b72>
Te6edf3NetworkConfigScreenTb4b4b4(Te6edf3viewModelTb4b4b4, Te6edf3onBack Tff7b72= Te6edf3dropUnlessResumed Tb4b4b4{ Te6edf3backStackTb4b4b4.Te6edf3removeLastOrNullTb4b4b4(Tb4b4b4) Tb4b4b4}Tb4b4b4)

Te6edf3ConfigRouteTb4b4b4.Te6edf3DISPLAY Tff7b72-Tff7b72>
Te6edf3DisplayConfigScreenTb4b4b4(Te6edf3viewModelTb4b4b4, Te6edf3onBack Tff7b72= Te6edf3dropUnlessResumed Tb4b4b4{ Te6edf3backStackTb4b4b4.Te6edf3removeLastOrNullTb4b4b4(Tb4b4b4) Tb4b4b4}Tb4b4b4)

Te6edf3ConfigRouteTb4b4b4.Te6edf3LORA Tff7b72-Tff7b72>
Te6edf3LoRaConfigScreenTb4b4b4(Te6edf3viewModelTb4b4b4, Te6edf3onBack Tff7b72= Te6edf3dropUnlessResumed Tb4b4b4{ Te6edf3backStackTb4b4b4.Te6edf3removeLastOrNullTb4b4b4(Tb4b4b4) Tb4b4b4}Tb4b4b4)

Te6edf3ConfigRouteTb4b4b4.Te6edf3BLUETOOTH Tff7b72-Tff7b72>
Te6edf3BluetoothConfigScreenTb4b4b4(Te6edf3viewModelTb4b4b4, Te6edf3onBack Tff7b72= Te6edf3dropUnlessResumed Tb4b4b4{ Te6edf3backStackTb4b4b4.Te6edf3removeLastOrNullTb4b4b4(Tb4b4b4) Tb4b4b4}Tb4b4b4)

Te6edf3ConfigRouteTb4b4b4.Te6edf3SECURITY Tff7b72-Tff7b72>
Te6edf3SecurityConfigScreenCommonTb4b4b4(Te6edf3viewModelTb4b4b4, Te6edf3onBack Tff7b72= Te6edf3dropUnlessResumed Tb4b4b4{ Te6edf3backStackTb4b4b4.Te6edf3removeLastOrNullTb4b4b4(Tb4b4b4) Tb4b4b4}Tb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}

Te6edf3ModuleRouteTb4b4b4.Te6edf3entriesTb4b4b4.Te6edf3forEach Tb4b4b4{ Te6edf3routeInfo Tff7b72-Tff7b72>
Te6edf3configComposableTb4b4b4(Te6edf3routeInfoTb4b4b4.Te6edf3routeTff7b72::Te6edf3classTb4b4b4, Te6edf3routeInfoTb4b4b4, Te6edf3radioConfigViewModelProviderTb4b4b4) Tb4b4b4{ Te6edf3viewModel Tff7b72-Tff7b72>
Tff7b72when Tb4b4b4(Te6edf3routeInfoTb4b4b4) Tb4b4b4{
Te6edf3ModuleRouteTb4b4b4.Te6edf3MQTT Tff7b72-Tff7b72>
Te6edf3MQTTConfigScreenTb4b4b4(Te6edf3viewModelTb4b4b4, Te6edf3onBack Tff7b72= Te6edf3dropUnlessResumed Tb4b4b4{ Te6edf3backStackTb4b4b4.Te6edf3removeLastOrNullTb4b4b4(Tb4b4b4) Tb4b4b4}Tb4b4b4)

Te6edf3ModuleRouteTb4b4b4.Te6edf3SERIAL Tff7b72-Tff7b72>
Te6edf3SerialConfigScreenTb4b4b4(Te6edf3viewModelTb4b4b4, Te6edf3onBack Tff7b72= Te6edf3dropUnlessResumed Tb4b4b4{ Te6edf3backStackTb4b4b4.Te6edf3removeLastOrNullTb4b4b4(Tb4b4b4) Tb4b4b4}Tb4b4b4)

Te6edf3ModuleRouteTb4b4b4.Te6edf3EXT_NOTIFICATION Tff7b72-Tff7b72>
Te6edf3ExternalNotificationConfigScreenCommonTb4b4b4(
Te6edf3viewModel Tff7b72= Te6edf3viewModelTb4b4b4,
Te6edf3onBack Tff7b72= Te6edf3dropUnlessResumed Tb4b4b4{ Te6edf3backStackTb4b4b4.Te6edf3removeLastOrNullTb4b4b4(Tb4b4b4) Tb4b4b4}Tb4b4b4,
Tb4b4b4)

Te6edf3ModuleRouteTb4b4b4.Te6edf3STORE_FORWARD Tff7b72-Tff7b72>
Te6edf3StoreForwardConfigScreenTb4b4b4(Te6edf3viewModelTb4b4b4, Te6edf3onBack Tff7b72= Te6edf3dropUnlessResumed Tb4b4b4{ Te6edf3backStackTb4b4b4.Te6edf3removeLastOrNullTb4b4b4(Tb4b4b4) Tb4b4b4}Tb4b4b4)

Te6edf3ModuleRouteTb4b4b4.Te6edf3RANGE_TEST Tff7b72-Tff7b72>
Te6edf3RangeTestConfigScreenTb4b4b4(Te6edf3viewModelTb4b4b4, Te6edf3onBack Tff7b72= Te6edf3dropUnlessResumed Tb4b4b4{ Te6edf3backStackTb4b4b4.Te6edf3removeLastOrNullTb4b4b4(Tb4b4b4) Tb4b4b4}Tb4b4b4)

Te6edf3ModuleRouteTb4b4b4.Te6edf3TELEMETRY Tff7b72-Tff7b72>
Te6edf3TelemetryConfigScreenTb4b4b4(Te6edf3viewModelTb4b4b4, Te6edf3onBack Tff7b72= Te6edf3dropUnlessResumed Tb4b4b4{ Te6edf3backStackTb4b4b4.Te6edf3removeLastOrNullTb4b4b4(Tb4b4b4) Tb4b4b4}Tb4b4b4)

Te6edf3ModuleRouteTb4b4b4.Te6edf3CANNED_MESSAGE Tff7b72-Tff7b72>
Te6edf3CannedMessageConfigScreenTb4b4b4(Te6edf3viewModelTb4b4b4, Te6edf3onBack Tff7b72= Te6edf3dropUnlessResumed Tb4b4b4{ Te6edf3backStackTb4b4b4.Te6edf3removeLastOrNullTb4b4b4(Tb4b4b4) Tb4b4b4}Tb4b4b4)

Te6edf3ModuleRouteTb4b4b4.Te6edf3AUDIO Tff7b72-Tff7b72>
Te6edf3AudioConfigScreenTb4b4b4(Te6edf3viewModelTb4b4b4, Te6edf3onBack Tff7b72= Te6edf3dropUnlessResumed Tb4b4b4{ Te6edf3backStackTb4b4b4.Te6edf3removeLastOrNullTb4b4b4(Tb4b4b4) Tb4b4b4}Tb4b4b4)

Te6edf3ModuleRouteTb4b4b4.Te6edf3REMOTE_HARDWARE Tff7b72-Tff7b72>
Te6edf3RemoteHardwareConfigScreenTb4b4b4(Te6edf3viewModelTb4b4b4, Te6edf3onBack Tff7b72= Te6edf3dropUnlessResumed Tb4b4b4{ Te6edf3backStackTb4b4b4.Te6edf3removeLastOrNullTb4b4b4(Tb4b4b4) Tb4b4b4}Tb4b4b4)

Te6edf3ModuleRouteTb4b4b4.Te6edf3NEIGHBOR_INFO Tff7b72-Tff7b72>
Te6edf3NeighborInfoConfigScreenTb4b4b4(Te6edf3viewModelTb4b4b4, Te6edf3onBack Tff7b72= Te6edf3dropUnlessResumed Tb4b4b4{ Te6edf3backStackTb4b4b4.Te6edf3removeLastOrNullTb4b4b4(Tb4b4b4) Tb4b4b4}Tb4b4b4)

Te6edf3ModuleRouteTb4b4b4.Te6edf3AMBIENT_LIGHTING Tff7b72-Tff7b72>
Te6edf3AmbientLightingConfigScreenTb4b4b4(Te6edf3viewModelTb4b4b4, Te6edf3onBack Tff7b72= Te6edf3dropUnlessResumed Tb4b4b4{ Te6edf3backStackTb4b4b4.Te6edf3removeLastOrNullTb4b4b4(Tb4b4b4) Tb4b4b4}Tb4b4b4)

Te6edf3ModuleRouteTb4b4b4.Te6edf3DETECTION_SENSOR Tff7b72-Tff7b72>
Te6edf3DetectionSensorConfigScreenTb4b4b4(Te6edf3viewModelTb4b4b4, Te6edf3onBack Tff7b72= Te6edf3dropUnlessResumed Tb4b4b4{ Te6edf3backStackTb4b4b4.Te6edf3removeLastOrNullTb4b4b4(Tb4b4b4) Tb4b4b4}Tb4b4b4)

Te6edf3ModuleRouteTb4b4b4.Te6edf3PAXCOUNTER Tff7b72-Tff7b72>
Te6edf3PaxcounterConfigScreenTb4b4b4(Te6edf3viewModelTb4b4b4, Te6edf3onBack Tff7b72= Te6edf3dropUnlessResumed Tb4b4b4{ Te6edf3backStackTb4b4b4.Te6edf3removeLastOrNullTb4b4b4(Tb4b4b4) Tb4b4b4}Tb4b4b4)

Te6edf3ModuleRouteTb4b4b4.Te6edf3STATUS_MESSAGE Tff7b72-Tff7b72>
Te6edf3StatusMessageConfigScreenTb4b4b4(Te6edf3viewModelTb4b4b4, Te6edf3onBack Tff7b72= Te6edf3dropUnlessResumed Tb4b4b4{ Te6edf3backStackTb4b4b4.Te6edf3removeLastOrNullTb4b4b4(Tb4b4b4) Tb4b4b4}Tb4b4b4)

Te6edf3ModuleRouteTb4b4b4.Te6edf3TAK Tff7b72-Tff7b72>
Te6edf3TAKConfigScreenTb4b4b4(Te6edf3viewModelTb4b4b4, Te6edf3onBack Tff7b72= Te6edf3dropUnlessResumed Tb4b4b4{ Te6edf3backStackTb4b4b4.Te6edf3removeLastOrNullTb4b4b4(Tb4b4b4) Tb4b4b4}Tb4b4b4)

Te6edf3ModuleRouteTb4b4b4.Te6edf3MESH_BEACON Tff7b72-Tff7b72>
Te6edf3MeshBeaconConfigScreenTb4b4b4(Te6edf3viewModelTb4b4b4, Te6edf3onBack Tff7b72= Te6edf3dropUnlessResumed Tb4b4b4{ Te6edf3backStackTb4b4b4.Te6edf3removeLastOrNullTb4b4b4(Tb4b4b4) Tb4b4b4}Tb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}

Te6edf3entryTff7b72<Te6edf3SettingsRouteTb4b4b4.Te6edf3TakServerTff7b72> Tb4b4b4{ Te6edf3TakServerScreenTb4b4b4(Te6edf3onBack Tff7b72= Te6edf3dropUnlessResumed Tb4b4b4{ Te6edf3backStackTb4b4b4.Te6edf3removeLastOrNullTb4b4b4(Tb4b4b4) Tb4b4b4}Tb4b4b4) Tb4b4b4}

Te6edf3entryTff7b72<Te6edf3SettingsRouteTb4b4b4.Te6edf3DebugPanelTff7b72> Tb4b4b4{
Tff7b72val Te6edf3viewModelTb4b4b4: Te6edf3DebugViewModel Tff7b72= Te6edf3koinViewModelTb4b4b4(Tb4b4b4)
Te6edf3DebugScreenTb4b4b4(Te6edf3viewModel Tff7b72= Te6edf3viewModelTb4b4b4, Te6edf3onNavigateUp Tff7b72= Te6edf3dropUnlessResumed Tb4b4b4{ Te6edf3backStackTb4b4b4.Te6edf3removeLastOrNullTb4b4b4(Tb4b4b4) Tb4b4b4}Tb4b4b4)
Tb4b4b4}

Te6edf3entryTff7b72<Te6edf3SettingsRouteTb4b4b4.Te6edf3AboutTff7b72> Tb4b4b4{
Tff7b72val Te6edf3settingsViewModelTb4b4b4: Te6edf3SettingsViewModel Tff7b72= Te6edf3koinViewModelTb4b4b4(Tb4b4b4)
Te6edf3AboutScreenTb4b4b4(
Te6edf3appVersionName Tff7b72= Te6edf3settingsViewModelTb4b4b4.Te6edf3appVersionNameTb4b4b4,
Te6edf3onNavigateUp Tff7b72= Te6edf3dropUnlessResumed Tb4b4b4{ Te6edf3backStackTb4b4b4.Te6edf3removeLastOrNullTb4b4b4(Tb4b4b4) Tb4b4b4}Tb4b4b4,
Te6edf3onNavigateToAcknowledgements Tff7b72= Te6edf3dropUnlessResumed Tb4b4b4{ Te6edf3backStackTb4b4b4.Te6edf3addTb4b4b4(Te6edf3SettingsRouteTb4b4b4.Te6edf3AcknowledgementsTb4b4b4) Tb4b4b4}Tb4b4b4,
Tb4b4b4)
Tb4b4b4}

Te6edf3entryTff7b72<Te6edf3SettingsRouteTb4b4b4.Te6edf3AcknowledgementsTff7b72> Tb4b4b4{
Te6edf3AcknowledgementsScreenTb4b4b4(
Te6edf3onNavigateUp Tff7b72= Te6edf3dropUnlessResumed Tb4b4b4{ Te6edf3backStackTb4b4b4.Te6edf3removeLastOrNullTb4b4b4(Tb4b4b4) Tb4b4b4}Tb4b4b4,
Te6edf3jsonProvider Tff7b72= Tb4b4b4{ Te6edf3getAboutLibrariesJsonTb4b4b4(Tb4b4b4) Tb4b4b4}Tb4b4b4,
Tb4b4b4)
Tb4b4b4}

Te6edf3entryTff7b72<Te6edf3SettingsRouteTb4b4b4.Te6edf3FilterSettingsTff7b72> Tb4b4b4{
Tff7b72val Te6edf3viewModelTb4b4b4: Te6edf3FilterSettingsViewModel Tff7b72= Te6edf3koinViewModelTb4b4b4(Tb4b4b4)
Te6edf3FilterSettingsScreenTb4b4b4(Te6edf3viewModel Tff7b72= Te6edf3viewModelTb4b4b4, Te6edf3onBack Tff7b72= Te6edf3dropUnlessResumed Tb4b4b4{ Te6edf3backStackTb4b4b4.Te6edf3removeLastOrNullTb4b4b4(Tb4b4b4) Tb4b4b4}Tb4b4b4)
Tb4b4b4}

Te6edf3entryTff7b72<Te6edf3SettingsRouteTb4b4b4.Te6edf3NodeListTff7b72> Tb4b4b4{
Tff7b72val Te6edf3settingsViewModelTb4b4b4: Te6edf3SettingsViewModel Tff7b72= Te6edf3koinViewModelTb4b4b4(Tb4b4b4)
Te6edf3NodeListScreenTb4b4b4(
Te6edf3settingsViewModel Tff7b72= Te6edf3settingsViewModelTb4b4b4,
Te6edf3onNavigateUp Tff7b72= Te6edf3dropUnlessResumed Tb4b4b4{ Te6edf3backStackTb4b4b4.Te6edf3removeLastOrNullTb4b4b4(Tb4b4b4) Tb4b4b4}Tb4b4b4,
Tb4b4b4)
Tb4b4b4}

Te6edf3entryTff7b72<Te6edf3SettingsRouteTb4b4b4.Te6edf3DeviceLinksTff7b72> Tb4b4b4{
Te6edf3DeviceLinkDirectoryScreenTb4b4b4(
Te6edf3viewModel Tff7b72= Te6edf3koinViewModelTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3onNavigateUp Tff7b72= Te6edf3dropUnlessResumed Tb4b4b4{ Te6edf3backStackTb4b4b4.Te6edf3removeLastOrNullTb4b4b4(Tb4b4b4) Tb4b4b4}Tb4b4b4,
Tb4b4b4)
Tb4b4b4}
Te6edf3entryTff7b72<Te6edf3SettingsRouteTb4b4b4.Te6edf3AppFunctionsSettingsTff7b72> Tb4b4b4{
Tff7b72val Te6edf3viewModelTb4b4b4: Te6edf3AppFunctionsSettingsViewModel Tff7b72= Te6edf3koinViewModelTb4b4b4(Tb4b4b4)
Te6edf3AppFunctionsSettingsScreenTb4b4b4(Te6edf3viewModel Tff7b72= Te6edf3viewModelTb4b4b4, Te6edf3onBack Tff7b72= Te6edf3dropUnlessResumed Tb4b4b4{ Te6edf3backStackTb4b4b4.Te6edf3removeLastOrNullTb4b4b4(Tb4b4b4) Tb4b4b4}Tb4b4b4)
Tb4b4b4}
Tb4b4b4}

T8b949e/** Expect declaration for the platform-specific settings main screen. */
Tf0883e@Composable
Tff7b72expect Tff7b72fun Td2a8ffSettingsMainScreenTb4b4b4(
Te6edf3settingsViewModelTb4b4b4: Te6edf3SettingsViewModelTb4b4b4,
Te6edf3radioConfigViewModelTb4b4b4: Te6edf3RadioConfigViewModelTb4b4b4,
Te6edf3onClickNodeChipTb4b4b4: Tb4b4b4(Tffa657IntTb4b4b4) Tff7b72-Tff7b72> Tffa657UnitTb4b4b4,
Te6edf3onNavigateTb4b4b4: Tb4b4b4(Te6edf3RouteTb4b4b4) Tff7b72-Tff7b72> Tffa657UnitTb4b4b4,
Te6edf3onBackTb4b4b4: Tb4b4b4(Tb4b4b4(Tb4b4b4) Tff7b72-Tff7b72> Tffa657UnitTb4b4b4)Tff7b72? Tff7b72= Tff7b72nullTb4b4b4,
Tb4b4b4)

T8b949e/** Expect declarations for platform-specific config screens. */
Tff7b72fun Tff7b72<Te6edf3R Tb4b4b4: Te6edf3RouteTff7b72> Td2a8ffEntryProviderScopeTff7b72<Te6edf3NavKeyTff7b72>Tb4b4b4.Te6edf3configComposableTb4b4b4(
Te6edf3routeTb4b4b4: Te6edf3KClassTff7b72<Te6edf3RTff7b72>Tb4b4b4,
Te6edf3routeInfoTb4b4b4: Te6edf3EnumTff7b72<Tff7b72*Tff7b72>Tb4b4b4,
Te6edf3radioConfigViewModelProviderTb4b4b4: Tf0883e@Composable Tb4b4b4(Te6edf3SettingsRouteTb4b4b4.Te6edf3SettingsTff7b72?Tb4b4b4) Tff7b72-Tff7b72> Te6edf3RadioConfigViewModelTb4b4b4,
Te6edf3contentTb4b4b4: Tf0883e@Composable Tb4b4b4(Te6edf3RadioConfigViewModelTb4b4b4) Tff7b72-Tff7b72> Tffa657UnitTb4b4b4,
Tb4b4b4) Tb4b4b4{
Te6edf3addEntryProviderTb4b4b4(Te6edf3routeTb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3viewModel Tff7b72= Te6edf3radioConfigViewModelProviderTb4b4b4(Tff7b72nullTb4b4b4)
T8b949e// Remote settings need a blocking progress overlay from the first frame. Local settings already have their
T8b949e// connect-time repository snapshot, so their route refresh stays non-blocking and does not flash a 0% overlay.
Te6edf3remember Tb4b4b4{ Te6edf3viewModelTb4b4b4.Te6edf3ensureLoadingForRemoteTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3let Tb4b4b4{ Tff7b72true Tb4b4b4} Tb4b4b4}
Te6edf3LaunchedEffectTb4b4b4(Tffa657UnitTb4b4b4) Tb4b4b4{ Te6edf3viewModelTb4b4b4.Te6edf3loadConfigRouteTb4b4b4(Te6edf3routeInfoTb4b4b4) Tb4b4b4}
Te6edf3contentTb4b4b4(Te6edf3viewModelTb4b4b4)
Tb4b4b4}
Tb4b4b4}

Served by rngit 1.5.0 - Generated in 0.11s